package org.afs.gescol.edt.api.generator;

import java.util.List;

/**
 * Timestable generator input.
 * @author Kobla GBENYO (kobla.gbenyo@gmail.com)
 */
public class InputData {

    private int dayNumber;

    private int dailyTimeSlotMax;

    private int dailyTimeTableMax;

    private int weeklyTimeTableVolume;

    private List<List<Integer>> ressourceAvailability;

    private List<List<Integer>> placeAvailability;

    /**
     * The constructor.
     * @param dayNumber number of working day on the table.
     * @param dailyTimeSlotMax max duration of a time slot per ressource on a day.
     * @param dailyTimeTableMax max number of daily hours.
     * @param weeklyTimeTableVolume hours volume per ressource for the place in a week to program.
     * @param ressourceAvailability the ressource availability on the table.
     * @param placeAvailability place availability on the table.
     */
    public InputData(int dayNumber, int dailyTimeSlotMax, int dailyTimeTableMax, int weeklyTimeTableVolume, List<List<Integer>> ressourceAvailability,
        List<List<Integer>> placeAvailability) {
        this.dayNumber = dayNumber;
        this.dailyTimeSlotMax = dailyTimeSlotMax;
        this.dailyTimeTableMax = dailyTimeTableMax;
        this.weeklyTimeTableVolume = weeklyTimeTableVolume;
        this.ressourceAvailability = ressourceAvailability;
        this.placeAvailability = placeAvailability;
    }

    /**
     * Get the value of dayNumber.
     * @return the dayNumber
     */
    public int getDayNumber() {
        return dayNumber;
    }

    /**
     * Set the value of dayNumber.
     * @param dayNumber the dayNumber to set
     */
    public void setDayNumber(int dayNumber) {
        this.dayNumber = dayNumber;
    }

    /**
     * Get the value of dailyTimeTableMax.
     * @return the dailyTimeTableMax
     */
    public int getDailyTimeTableMax() {
        return dailyTimeTableMax;
    }

    /**
     * Set the value of dailyTimeTableMax.
     * @param dailyTimeTableMax the dailyTimeTableMax to set
     */
    public void setDailyTimeTableMax(int dailyTimeTableMax) {
        this.dailyTimeTableMax = dailyTimeTableMax;
    }

    /**
     * Get the value of weeklyTimeTableVolume.
     * @return the weeklyTimeTableVolume
     */
    public int getWeeklyTimeTableVolume() {
        return weeklyTimeTableVolume;
    }

    /**
     * Set the value of weeklyTimeTableVolume.
     * @param weeklyTimeTableVolume the weeklyTimeTableVolume to set
     */
    public void setWeeklyTimeTableVolume(int weeklyTimeTableVolume) {
        this.weeklyTimeTableVolume = weeklyTimeTableVolume;
    }

    /**
     * Get the value of dailyTimeSlotMax.
     * @return the dailyTimeSlotMax
     */
    public int getDailyTimeSlotMax() {
        return dailyTimeSlotMax;
    }

    /**
     * Set the value of dailyTimeSlotMax.
     * @param dailyTimeSlotMax the dailyTimeSlotMax to set
     */
    public void setDailyTimeSlotMax(int dailyTimeSlotMax) {
        this.dailyTimeSlotMax = dailyTimeSlotMax;
    }

    /**
     * Get the value of ressourceAvailability.
     * @return the ressourceAvailability
     */
    public List<List<Integer>> getRessourceAvailability() {
        return ressourceAvailability;
    }

    /**
     * Set the value of ressourceAvailability.
     * @param ressourceAvailability the ressourceAvailability to set
     */
    public void setRessourceAvailability(List<List<Integer>> ressourceAvailability) {
        this.ressourceAvailability = ressourceAvailability;
    }

    /**
     * Get the value of placeAvailability.
     * @return the placeAvailability
     */
    public List<List<Integer>> getPlaceAvailability() {
        return placeAvailability;
    }

    /**
     * Set the value of placeAvailability.
     * @param placeAvailability the placeAvailability to set
     */
    public void setPlaceAvailability(List<List<Integer>> placeAvailability) {
        this.placeAvailability = placeAvailability;
    }

    @Override
    public String toString() {
        final StringBuffer str = new StringBuffer();
        str.append("TOTAL DAYS=").append(dayNumber).append(";");
        str.append("TOTAL HOURS PER DAY=").append(dailyTimeTableMax).append(";");
        str.append("WEEKLY HOURS TO PROGRAM=").append(weeklyTimeTableVolume).append(";");
        str.append("SLOT MAX DURATION=").append(dailyTimeSlotMax).append(";");
        str.append("RESSOURCE AVAIL.=").append(ressourceAvailability).append(";");
        str.append("PLACE AVAIL.=").append(placeAvailability).append(".");
        return str.toString();
    }
}
